<?php

/**
 * Created by Sven.
 * Date: 2016/12/25
 * Time: 12:31
 * Level 控制器
 */
class LevelAction extends Action {

    public function __construct( $_tpl ) {
        parent::__construct( $_tpl, new LevelModel( $_tpl ) );
        // 3 在进行一系列action之后，显示界面
//        $this->tpl->display( 'main_home_level.tpl' );
    }

    public function action() {
        if (!isset($_GET['action'])){
            $_GET['action'] = 'show';
        }

        // 使用?action=show 区分同一个页面的四个模块
        switch ( $_GET[ 'action' ] ) {
            case 'add':
                $this->add();
                break;
            case 'delete':
                $this->delete();
                break;
            case 'update':
                $this->update();
                break;
            case 'show':
                $this->show();
                break;
            default:
                exit( 'ERROR：action参数非法' );
                break;
        }
    }

    // 新增等级
    private function add() {
        // 在显示页面元素前，处理一下接收的参数
        if ( IS_POST ) {

            if ( Validate::checkNull( $_POST[ 'level_name' ] ) ) Tool::alertBack( '警告：等级名称不能为空' );
            if ( Validate::checkMinLengh( $_POST[ 'level_name' ], 2 ) ) Tool::alertBack( '警告：等级名称不能小于2位或大于20位' );
            if ( Validate::checkMaxLengh( $_POST[ 'level_name' ], 20 ) ) Tool::alertBack( '警告：等级名称不能小于2位或大于20位' );
            if ( Validate::checkMaxLengh( $_POST[ 'level_info' ], 200 ) ) Tool::alertBack( '警告：等级描述不能大于200位' );

            $this->model->level_name = $_POST[ 'level_name' ];
            $this->model->level_info = $_POST[ 'level_info' ];

            $_level_count = $this->model->getLevelCountByName();
            if ($_level_count > 0){
                Tool::alertBack('已经存在相同的等级名称');
            } else {
                $_result = $this->model->addLevel();
                // 判断是否执行成功
                if ( $_result ) {
                    // 成功
                    // 返回之前的页面
                    $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                    Tool::alertLocation( '修改管理员成功', $back_url );
                } else {
                    // 失败
                    Tool::alertBack( '新增等级失败' );
                }

            }
        }

        $this->tpl->assign( 'add', true );
        $this->tpl->assign( 'title', '新增等级' );
    }

    // 删除等级
    private function delete() {
        if ( isset( $_GET[ 'id' ] ) ) {
            $this->model->id = $_GET[ 'id' ];
            $_manage_model = new ManageModel();
            $_manage_model->admin_level = $_GET[ 'id' ];
            $_mange_count = intval( $_manage_model->getManageCountByLevel() );
            if ( $_mange_count > 0 ) {
                Tool::alertBack( '只允许删除为空的等级' );
            } else {
                $_result = $this->model->deleteLevel(); // true or false
                if ( $_result ) {
                    // 返回之前的页面
                    $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                    Tool::alertLocation( '修改管理员成功', $back_url );
                } else {
                    Tool::alertBack( '删除等级失败' );
                }
            }

        } else {
            Tool::alertBack( '非法操作：ID错误' );
        }
    }

    // 修改等级
    private function update() {
        // 在显示界面之前，判断是否提交了数据
        if (  IS_POST ) {
            $_POST['id'] = intval($_POST['id']);
            if ( isset( $_POST[ 'id' ] ) && $_POST['id'] > 0  ) {
                // 判断这个id是否对应真实的数据记录
                $_count = $this->model->getCount('cms_manage', 'id', $_POST['id']);
                if ($_count <= 0){
                    Tool::alertBack('警告：非法的ID值');
                    return;
                }

                if ( Validate::checkNull( $_POST[ 'level_name' ] ) ) Tool::alertBack( '警告：等级名称不能为空' );
                if ( Validate::checkMinLengh( $_POST[ 'level_name' ], 2 ) ) Tool::alertBack( '警告：等级名称不能小于2位或大于20位' );
                if ( Validate::checkMaxLengh( $_POST[ 'level_name' ], 20 ) ) Tool::alertBack( '警告：等级名称不能小于2位或大于20位' );
                if ( Validate::checkMaxLengh( $_POST[ 'level_info' ], 200 ) ) Tool::alertBack( '警告：等级描述不能大于200位' );

                $this->model->id = $_POST[ 'id' ];
                $this->model->level_name = $_POST[ 'level_name' ];
                $this->model->level_info = $_POST[ 'level_info' ];

                $_level_count = $this->model->getLevelCountByName();
                if ($_level_count > 0){
                    Tool::alertBack('已经存在相同的等级名称');
                } else {
                    $_result = $this->model->updateLevel();
                    // 判断是否执行成功
                    if ( $_result ) {
                        // 成功
                        // 返回之前的页面
                        $back_url = isset($_POST['prev_url']) ? $_POST['prev_url'] : PREV_URL;
                        Tool::alertLocation( '修改管理员成功', $back_url );
                    } else {
                        // 失败
                        Tool::alertBack( '修改等级失败' );
                    }
                }

            } else {
                Tool::alertBack( '非法操作：ID错误' );
            }

        }

        if ( $_GET[ 'id' ] ) {
            $this->model->id = $_GET[ 'id' ];
            $_row = $this->model->getSingleLevel();
            if ( isset( $_row ) && is_object( $_row ) ) {
                $this->tpl->assign( 'data', $_row );
            } else {
                Tool::alertBack( '非法操作：ID错误' );
            }

        } else {
            Tool::alertBack( '非法操作：ID错误' );
        }

        $this->tpl->assign( 'update', true );
        $this->tpl->assign( 'title', '修改等级' );
    }

    // 显示等级
    private function show() {

        // 分页
        $_total =  $this->model->getTotalCount();
        parent::page($_total, PAGE_SIZE);

        $_data = $this->model->getAllLevels();

        $this->tpl->assign( 'data', $_data );
        $this->tpl->assign( 'show', true );
        $this->tpl->assign( 'title', '等级列表' );
    }


}